home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / pp_lib.bas < prev    next >
BASIC Source File  |  2001-04-11  |  4KB  |  137 lines

  1. Attribute VB_Name = "pp_lib"
  2. '
  3. ' File - pp_lib.bas
  4. '
  5. ' This application reads and writes data to the Parallel Port, and is
  6. ' controlled via a graphical user interface - pp_gui.frm
  7. ' The Parallel Port is accessed directly on the motherboard, using
  8. ' WinDriver functions.
  9. '
  10.  
  11. Option Explicit
  12.  
  13. ' Internal data structures
  14. Type PP_HANDLE
  15.     hWD As Long
  16.     cardReg As WD_CARD_REGISTER
  17.     base_addr As Long
  18. End Type
  19.  
  20. ' PP register definitions
  21. Global Const PP_data_OFFSET = &H0
  22. Global Const PP_status_OFFSET = &H1
  23. Global Const PP_control_OFFSET = &H2
  24.  
  25. Global g_Data As Byte
  26.  
  27. Sub PP_SetCardElements(hPP As PP_HANDLE, base_addr As Long)
  28.     Dim pItem As WD_ITEMS
  29.     
  30.     hPP.cardReg.Card.dwItems = 1
  31.     hPP.cardReg.Card.Item(0).Item = ITEM_IO
  32.     hPP.cardReg.Card.Item(0).fNotSharable = False
  33.     hPP.cardReg.Card.Item(0).dw1 = base_addr
  34.     hPP.cardReg.Card.Item(0).dw2 = 8
  35.     hPP.base_addr = base_addr
  36. End Sub
  37.  
  38. Function PP_Open(hPP As PP_HANDLE, base_addr As Long) As Boolean
  39.     Dim ver As WD_Version
  40.  
  41.     hPP.cardReg.hCard = 0
  42.     hPP.hWD = INVALID_HANDLE_VALUE
  43.     hPP.hWD = WD_Open()
  44.  
  45.     ' Check if handle valid & version OK
  46.     If (hPP.hWD = INVALID_HANDLE_VALUE) Then
  47.         MsgBox "Failed opening WinDriver device", vbCritical + vbOKOnly, "parallel_port"
  48.         GoTo exitError
  49.     End If
  50.  
  51.     WD_Version hPP.hWD, ver
  52.     If (ver.dwVer < WD_VER) Then
  53.         MsgBox "Incorrect WinDriver version", vbCritical + vbOKOnly, "parallel_port"
  54.         GoTo exitError
  55.     End If
  56.  
  57.     PP_SetCardElements hPP, base_addr
  58.     hPP.cardReg.fCheckLockOnly = False
  59.     WD_CardRegister hPP.hWD, hPP.cardReg
  60.     If (hPP.cardReg.hCard = 0) Then
  61.         MsgBox "Failed locking device.", vbCritical + vbOKOnly, "parallel_port"
  62.         GoTo exitError
  63.     End If
  64.  
  65.     ' Open finished OK
  66.     PP_Open = True
  67.     GoTo finish
  68.  
  69. exitError:
  70.     ' Error during Open
  71.     If (hPP.cardReg.hCard <> 0) Then
  72.         WD_CardUnregister hPP.hWD, hPP.cardReg
  73.     End If
  74.     If (hPP.hWD <> INVALID_HANDLE_VALUE) Then
  75.         WD_Close hPP.hWD
  76.     End If
  77.     hPP.base_addr = 0
  78.     PP_Open = False
  79.  
  80. finish:
  81. End Function
  82.  
  83. Sub PP_Close(hPP As PP_HANDLE)
  84.  
  85.     ' Unregister card
  86.     If (hPP.cardReg.hCard) Then
  87.         WD_CardUnregister hPP.hWD, hPP.cardReg
  88.     End If
  89.  
  90.     ' Close WinDriver
  91.     WD_Close hPP.hWD
  92. End Sub
  93.  
  94. Function PP_ReadByte(hPP As PP_HANDLE, dwOffset As Long) As Byte
  95.     Dim Trans As WD_Transfer
  96.     
  97.     Trans.dwPort = hPP.base_addr + dwOffset
  98.     Trans.cmdTrans = RP_BYTE
  99.     WD_Transfer hPP.hWD, Trans
  100.     PP_ReadByte = Trans.dwDataTransfer
  101. End Function
  102.  
  103. Sub PP_WriteByte(hPP As PP_HANDLE, dwOffset As Long, Data As Byte)
  104.     Dim Trans As WD_Transfer
  105.     
  106.     Trans.dwPort = hPP.base_addr + dwOffset
  107.     Trans.dwDataTransfer = Data
  108.     Trans.cmdTrans = WP_BYTE
  109.     Trans.dwDataTransfer = Data
  110.     WD_Transfer hPP.hWD, Trans
  111. End Sub
  112.  
  113. Function PP_ReadData(hPP As PP_HANDLE) As Byte
  114.     PP_ReadData = PP_ReadByte(hPP, PP_data_OFFSET)
  115. End Function
  116.  
  117. Sub PP_WriteData(hPP As PP_HANDLE, Data As Byte)
  118.     PP_WriteByte hPP, PP_data_OFFSET, Data
  119. End Sub
  120.  
  121. Function PP_ReadStatus(hPP As PP_HANDLE) As Byte
  122.     PP_ReadStatus = PP_ReadByte(hPP, PP_status_OFFSET)
  123. End Function
  124.  
  125. Sub PP_WriteStatus(hPP As PP_HANDLE, Data As Byte)
  126.     PP_WriteByte hPP, PP_status_OFFSET, Data
  127. End Sub
  128.  
  129. Function PP_ReadControl(hPP As PP_HANDLE) As Byte
  130.     PP_ReadControl = PP_ReadByte(hPP, PP_control_OFFSET)
  131. End Function
  132.  
  133. Sub PP_WriteControl(hPP As PP_HANDLE, Data As Byte)
  134.     PP_WriteByte hPP, PP_control_OFFSET, Data
  135. End Sub
  136.  
  137.